import { Observer } from './observer.js'
import { Compiler } from './compiler.js'

export class Vue {
  constructor(options) {
    this.$el = options.el
    this.$data = options.data

    //数据劫持
    new Observer(this.$data)
    //编译模板
    new Compiler(this.$el, this)

    //把 data 代理到 vm 上
    proxyData(this.$data, this)
  }
}

/**
 * @desc 将 data 上数据代理到 vm 上
 * @param {Object} data 
 * @param {Vue} vm 
 */
function proxyData(data, vm) {
  for(let key in data) {
    Object.defineProperty(vm, key, {
      get() {
        return data[key]
      },
      set(newValue) {
        data[key] = newValue
      }
    })
  }
}